package cn.hsw.platform.core.util;

import cn.hsw.platform.core.dto.PageDto;
import cn.hsw.platform.core.dto.ResultDto;
import cn.hsw.platform.core.enums.HttpEnum;

import java.util.List;

/**
 * 返回值工具类
 * @author 李子木
 * @date 2020-10-23
 */
public class ResultUtil {

    /**
     * 操作成功
     * @param msg 提示信息
     * @param t 对象
     * @return ResultDto<T>
     */
    public static <T> ResultDto<T> success(String msg,T t){
        ResultDto<T> result = new ResultDto<>();
        result.setCode(HttpEnum.SUCCESS.getCode());
        result.setData(t);
        result.setMsg(msg);
        return result;
    }

    /**
     * 操作成功 使用默认的提示信息
     * @param t 对象
     * @return ResultDto<T>
     */
    public static <T> ResultDto<T> success(T t){
        return success(HttpEnum.SUCCESS.getMsg(),t);
    }
    /**
     * 操作成功 返回提示信息 没有数据返回
     * @param msg 提示信息
     * @return ResultDto<T>
     */
    /*public static <T> ResultDto<T> success(String msg){
        return success(msg, null);
    }*/
    /**
     * 操作成功 没有数据返回
     * @return ResultDto<T>
     */
    public static <T> ResultDto<T> success(){
        return success(HttpEnum.SUCCESS.getMsg(),null);
    }

    /**
     * 操作失败 ，错误的返回
     * @param code 错误码
     * @param msg 提示信息
     * @return ResultDto<T
     */
    public static <T> ResultDto<T> error(Integer code,String msg){
        ResultDto<T> result = new ResultDto<>();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }

    /**
     * 错误返回
     * @param httpEnum  枚举类型
     * @return ResultDto<T>
     */
    public static <T> ResultDto<T> error(HttpEnum httpEnum){
        ResultDto<T> result = new ResultDto<>();
        result.setCode(httpEnum.getCode());
        result.setMsg(httpEnum.getMsg());
        return result;
    }


    /**
     * 分页返回信息
     * @param msg 消息
     * @param list 列表
     * @param total 总数
     * @return ResultDto<PageDto<T>>
     */
    public static <T> ResultDto<PageDto<T>> success(String msg, List<T> list, long total){
        PageDto<T> page = new PageDto<>();
        page.setList(list);
        page.setTotal(total);
        return success(msg,page);
    }

    /**
     * 分页返回信息
     * @param list 列表
     * @param total 总数
     * @return ResultDto<PageDto<T>>
     */
    public static <T> ResultDto<PageDto<T>> success(List<T> list, long total){
        PageDto<T> page = new PageDto<>();
        page.setList(list);
        page.setTotal(total);
        return success(page);
    }
}
